//
//  EsFeature.h
//  esfaceid
//
//  Created by es on 2021/12/10.
//

#ifndef EsFaceIDResult_h
#define EsFaceIDResult_h
#import "EsFeature.h"
#import <UIKit/UIKit.h>

/**
 * 错误码枚举
 */
enum EsFaceIDErrorCode {
    /**
     * 执行成功
     */
    EF_SUCCESS = 0,
    /**
     * 缺少权限s
     */
    EF_NOT_PERMISSION,
    /**
     * 数据库错误
     */
    EF_DB_ERROR,
    /**
     * 鉴权失败
     */
    EF_AUTHENTICATION_ERROR,
    /**
     * 人脸未注册
     */
    EF_FACE_UNREGISTERED,
    /**
     * 初始化引擎失败
     */
    EF_INIT_ERROR,
    /**
     * 参数错误
     */
    EF_PARAME_ERROR,
    /**
     * 执行失败
     */
    EF_FAILED,
    /**
     * 发生异常
     */
    EF_EXCEPTION,
    /**
     * 没有识别到人脸
     */
    EF_NO_FACE,
    /**
     * 用户主动退出认证界面
     */
    EF_CANCEL,
    /**
     * 人脸识别结束
     */
    EF_FACE_RECOGNITION_END,
    /**证书过期**/
    EF_CERT_EXPIRED,
    /**错误的参数**/
    EF_INVALID_PARAM
};

typedef enum EsFaceIDErrorCode EsFaceIDErrorCode;

static NSArray *EsFaceIDErrorCodeArray;

 // 创建初始化函数。等于用宏创建一个getter函数
 #define cEsFaceIDErrorCodeGet (EsFaceIDErrorCodeArray == nil ? EsFaceIDErrorCodeArray = [[NSArray alloc] initWithObjects:\
   @"EF_SUCCESS",\
  @"EF_NOT_PERMISSION",\
  @"EF_DB_ERROR",\
   @"EF_AUTHENTICATION_ERROR",\
   @"EF_INIT_ERROR",\
   @"EF_PARAME_ERROR",\
  @"EF_FAILED",\
    @"EF_EXCEPTION",\
   @"EF_NO_FACE", nil] : EsFaceIDErrorCodeArray)

 // 枚举 to 字串
 #define cEsFaceIDErrorCodeString(type) ([cEsFaceIDErrorCodeGet objectAtIndex:type])

// 字串 to 枚举
 #define cEsFaceIDErrorCodeEnum(string) ([cEsFaceIDErrorCodeGet indexOfObject:string])
/**
 * 执行结果
 */
@interface EsFaceIDResult : NSObject
/**
 * 执行结果码
 */
@property  (nonatomic) EsFaceIDErrorCode code;
/**
 * 执行结果描述
 */
@property (nonatomic, copy) NSString* __nullable msg;
/**
 * 人脸特征数据
 */
@property (nonatomic)  NSString* __nullable data;

/**
 * 初始化
 * 
 * @param code 错误码
 * @param errMsg 错误描述
 */
-(id _Nullable )initWithCode:(EsFaceIDErrorCode)code errMsg:(NSString *_Nullable)errMsg;

/**
 * 转换成json字符串
 * @return JSON字符串
 */
-(NSDictionary *_Nullable)toJson;

@end

#endif /* EsFaceIDResult_h */
